#pragma once

#define LOCATION_MODE_DIRECT 0
#define LOCATION_MODE_SMOOTH 1

class Location {
public:
	Location();
	Location(const Location& loc);
	Location(double x, double y, double z);
	Location(double x, double y, double z, double yaw, double pitch);
	Location(double x, double y, double z, double yaw, double pitch, double head_yaw);
	~Location();
	
	void setMode(int m);
	int getMode();
	void Update();
	double getX();
	double getY();
	double getZ();
	double getYaw();
	double getPitch();
	double getHeadYaw();
	void setX(double x);
	void setY(double y);
	void setZ(double z);
	void setXYZ(double x, double y, double z);
	void setYaw(double yaw);
	void setPitch(double pitch);
	void setHeadYaw(double yaw);
	void relativeX(double x);
	void relativeY(double y);
	void relativeZ(double z);
	void relativeXYZ(double x, double y, double z);
	float getDeltaT();
	
	bool operator== (Location& loc);
	bool operator!= (Location& loc);
//	void operator= (Location& loc);

private:
	double X, Y, Z;
	double Yaw, Pitch, HeadYaw;
	int mode;
	double targetX, targetY, targetZ;
	double targetYaw, targetPitch, targetHeadYaw;
	float t;
	float dt;
};
